#include<bits/stdc++.h>
using namespace std;
const int N=6000010;
int n,m,k,vis[N],tx,ty,sx[4]={0,0,-1,1},sy[4]={1,-1,0,0};
char s[N];
struct ss{
	int x,y,d;
}t;
queue<ss>q;
int g(int x,int y){
	return (x-1)*m+y;
}
void dfs(int x,int y,int z){
	int c,d;
	vis[g(x,y)]=1;
	if(x==tx&&y==ty){
		printf("%d",z);
		exit(0);
	}
	q.push({x,y,z});
	for(int i=0;i<=3;i++){
		c=x+sx[i];
		d=y+sy[i];
		if(c>=1&&c<=n&&d>=1&&d<=m&&s[g(c,d)]=='.'&&!vis[g(c,d)]){
			dfs(c,d,z);
		}
	}
}
int bfs(int x,int y){
	dfs(x,y,0);
	while(!q.empty()){
		t=q.front();
		q.pop();
		if(t.x==tx&&t.y==ty){
			return t.d;
		}
		for(int i=max(1,t.x-k);i<=min(n,t.x+k);i++){
			for(int j=max(1,t.y-k);j<=min(m,t.y+k);j++){
				if((i==t.x-k||i==t.x+k)&&(j==t.y-k||j==t.y+k)){
					continue;
				}
				if(!vis[g(i,j)]){
					dfs(i,j,t.d+1);
				}
			}
		}
	}
	assert(0);
	return 1e9;
}
int main(){
	freopen("stamp.in","r",stdin);
	freopen("stamp.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	int x,y;
	cin>>n>>m>>k>>x>>y>>tx>>ty;
	for(int i=1;i<=n;i++){
		for(int j=1;j<=m;j++){
			cin>>s[g(i,j)];
		}
	}
	cout<<bfs(x,y);
}